我们可以将 JavaScript 中所有数据分为基本数据类型和引用类型,基本数据类型存在在栈中,引用类型存在堆中,变量名存储的是一个指向堆中的地址。
基本数据类型
一共有五种基本数据类型:数值型 Number、字符串 String、布尔型 Boolean、Undefined 型、Null 型。
数值型
数值型有整数型和浮点型,整数有十进制、八进制(严格模式下无效)、十六进制,其他进制在计算时都会转换为十进制。
浮点型保留小数点后十七位,有 e 指数表示形式。
数值型有一个特别的值:NaN(Not a Number),NaN 表示一个本来要返回数值的操作数未返回数值的情况,比如除数为 0 的情况,这样可以避免抛出错误,不影响其他代码的执行。
涉及任何 NaN 的操作都会返回 NaN;NaN 与任何值都不相等,包括它自己。可以用 isNaN() 方法判断,其他数据类型自动转换为数值类型。
|
|
字符串
用单引号或者双引号括起来的就叫字符串,引号嵌套可以用转义字符。
布尔型
布尔型有两个值:true 和 false。
Undefined
Undefined 型只有一个值:undefined,表示变量声明了但未初始化。
|
|
Null
Null 型也只有一个值:null,表示空对象指针,若定义的变量想用来保存对象,最好将其初始化为 null。
关于 null 和 undefined
undefined 是 null 派生而来。
|
|
相互转换
其他 – > 数值
转换情况: Number()、parseInt()、parseFloat()、一元加运算符。
Number()
Number() 的效果与一元加运算符等效(+ 一边是字符串时,+ 为连接符)。
true –> 1;false –> 0;null – >0;undefined –> NaN。
空字符串 –> 0;非空字符串全为数值时,直接转换为数值型,忽略八进制前缀 0(即不转换为八进制),不忽略十六进制前缀 0x,其他字符串为 NaN。
|
|
parseInt()
由于 Number() 函数转换字符串时复杂且不太合理,所以我们一般使用 parseInt() 将字符串转换成整数,使用 parseFloat() 转换成浮点数。parseInt() 会忽略字符串前面的空格,如果第一个非空字符是数字,函数会一直解析到第一个非数字字符。
|
|
我们可以看到除了非空字符串,parseInt() 均返回 NaN,因此 parseInt() 通常只用于字符串转数值的情况。
parseFloat()
类似 parseInt(),parseFloat() 不同的只是不会忽略字符串中的小数点。
其他 – > 布尔
在使用 Boolean(xxx) 方法,或条件和循环中的判断语句中其他数据类型会转换成布尔型。
对于基本数据格式:数值(0/NaN)、空字符串、null、undefined 转为 false。其余转换为 true。
其他 – > 字符串
加号操作符(连接符)
一元加号运算符除了计算之外,还有一个用途就是连接字符串与其他数据类型。
|
|
toString()
|
|
String()
|
|
toString() 与 String() 的区别在于:null 和 undefined 没有 toString() 这个方法。所有基本数据类型都有 String() 方法。
引用类型
引用类型是一种数据类型,引用类型的值也叫对象,常见的引用类型有 Object、数组 Array、正则表达式 Rep、日期 Date、函数 Function 等。由于数组的方法较多容易混淆,所以只归纳了数据的一些常用方法。
数组
常用方法
push(elements): 添加到数组尾部,返回新数组长度。
pop(): 移除数组最后一项,返回移除元素。
shift(): 移除数组第一项,返回移除元素。
unshfit(elements): 添加到数组头部,返回新数组长度。
reverse(): 反转数组。
sort(): 排序方法,直接使用 sort 方法会默认调用 toString(),因此通常使用比较函数。
|
|
arr.concat(arrs): 连接多个数组,返回新数组
splice(): 删除/插入数组,不影响原数组。
|
|
indexOf()/lastIndexOf(): 查找某一项所在位置,返回索引,默认使用全等符号。
every(): 对数组中每一项执行给定函数,若每一项返回 true 则返回 true。
filter(): 对数组中每一项执行给定函数,返回所有返回 true 的项组成的数组。
forEach(): 对数组中每一项执行给定函数,无返回。
map(): 对数组中每一项执行给定函数,返回所有结果。
some(): 对数组中每一项执行给定函数,若任一项返回 true,则返回 true。
redeuce()/reduceRight(): 函数返回值会左右第一个参数自动传给下一项,类似迭代。
join(“连接符”): 通过连接符将数组转换成字符串。同样可以通过 split(“连接符”) 方法将字符串转换成数组。
|
|
类型检测
typeof
typeof 不能检测出具体引用数据类型,特别地 null 返回 object。
typeof 返回值:object、number、string、boolean、undefined(变量未声明或者声明了未初始化)、function
|
|
typeof 经常用来判断一个变量是否存在。
|
|
instanceof
instanceof 一般用来判断对象的具体类型,或者判断某个变量是否是某个对象的实例。
|
|